diff --git a/system/database/drivers/oci8/oci8_driver.php b/system/database/drivers/oci8/oci8_driver.php
index 985466a..b4da3e9 100644
--- a/system/database/drivers/oci8/oci8_driver.php
+++ b/system/database/drivers/oci8/oci8_driver.php
@@ -145,10 +145,10 @@
 	/**
 	 * Version number query string
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @return  string
 	 */
-	public function _version()
+	protected function _version()
 	{
 		return oci_server_version($this->conn_id);
 	}
@@ -158,11 +158,11 @@
 	/**
 	 * Execute the query
 	 *
-	 * @access  public  called by the base class
+	 * @access  protected  called by the base class
 	 * @param   string  an SQL query
 	 * @return  resource
 	 */
-	public function _execute($sql)
+	protected function _execute($sql)
 	{
 		// oracle must parse the query before it is run. All of the actions with
 		// the query are based on the statement id returned by ociparse
@@ -480,11 +480,11 @@
 	 *
 	 * Generates a platform-specific query string so that the table names can be fetched
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @param	boolean
 	 * @return	string
 	 */
-	public function _list_tables($prefix_limit = FALSE)
+	protected function _list_tables($prefix_limit = FALSE)
 	{
 		$sql = "SELECT TABLE_NAME FROM ALL_TABLES";
 
@@ -503,11 +503,11 @@
 	 *
 	 * Generates a platform-specific query string so that the column names can be fetched
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @param   string  the table name
 	 * @return  string
 	 */
-	public function _list_columns($table = '')
+	protected function _list_columns($table = '')
 	{
 		return "SELECT COLUMN_NAME FROM all_tab_columns WHERE table_name = '$table'";
 	}
@@ -523,7 +523,7 @@
 	 * @param   string  the table name
 	 * @return  object
 	 */
-	public function _field_data($table)
+	protected function _field_data($table)
 	{
 		return "SELECT * FROM ".$table." where rownum = 1";
 	}
@@ -533,10 +533,10 @@
 	/**
 	 * The error message string
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @return  string
 	 */
-	public function _error_message()
+	protected function _error_message()
 	{
 		// If the error was during connection, no conn_id should be passed
 		$error = is_resource($this->conn_id) ? oci_error($this->conn_id) : oci_error();
@@ -548,10 +548,10 @@
 	/**
 	 * The error message number
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @return  integer
 	 */
-	public function _error_number()
+	protected function _error_number()
 	{
 		// Same as _error_message()
 		$error = is_resource($this->conn_id) ? oci_error($this->conn_id) : oci_error();
@@ -565,11 +565,11 @@
 	 *
 	 * This function escapes column and table names
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @param	string
 	 * @return	string
 	 */
-	public function _escape_identifiers($item)
+	protected function _escape_identifiers($item)
 	{
 		if ($this->_escape_char == '')
 		{
@@ -608,11 +608,11 @@
 	 * This function implicitly groups FROM tables so there is no confusion
 	 * about operator precedence in harmony with SQL standards
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @param	type
 	 * @return	type
 	 */
-	public function _from_tables($tables)
+	protected function _from_tables($tables)
 	{
 		if ( ! is_array($tables))
 		{
@@ -635,7 +635,7 @@
 	 * @param   array   the insert values
 	 * @return  string
 	 */
-	public function _insert($table, $keys, $values)
+	protected function _insert($table, $keys, $values)
 	{
 		return "INSERT INTO ".$table." (".implode(', ', $keys).") VALUES (".implode(', ', $values).")";
 	}
@@ -647,13 +647,13 @@
 	 *
 	 * Generates a platform-specific insert string from the supplied data
 	 *
-	 * @access      public
+	 * @access      protected
 	 * @param       string  the table name
 	 * @param       array   the insert keys
 	 * @param       array   the insert values
 	 * @return      string
 	 */
-	public function _insert_batch($table, $keys, $values)
+	protected function _insert_batch($table, $keys, $values)
 	{
 		$keys = implode(', ', $keys);
 		$sql = "INSERT ALL\n";
@@ -675,7 +675,7 @@
 	 *
 	 * Generates a platform-specific update string from the supplied data
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @param	string	the table name
 	 * @param	array	the update data
 	 * @param	array	the where clause
@@ -683,7 +683,7 @@
 	 * @param	array	the limit clause
 	 * @return	string
 	 */
-	public function _update($table, $values, $where, $orderby = array(), $limit = FALSE)
+	protected function _update($table, $values, $where, $orderby = array(), $limit = FALSE)
 	{
 		foreach ($values as $key => $val)
 		{
@@ -712,11 +712,11 @@
 	 * If the database does not support the truncate() command
 	 * This function maps to "DELETE FROM table"
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @param	string	the table name
 	 * @return	string
 	 */
-	public function _truncate($table)
+	protected function _truncate($table)
 	{
 		return "TRUNCATE TABLE ".$table;
 	}
@@ -728,13 +728,13 @@
 	 *
 	 * Generates a platform-specific delete string from the supplied data
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @param	string	the table name
 	 * @param	array	the where clause
 	 * @param	string	the limit clause
 	 * @return	string
 	 */
-	public function _delete($table, $where = array(), $like = array(), $limit = FALSE)
+	protected function _delete($table, $where = array(), $like = array(), $limit = FALSE)
 	{
 		$conditions = '';
 
@@ -762,13 +762,13 @@
 	 *
 	 * Generates a platform-specific LIMIT clause
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @param   string  the sql query string
 	 * @param   integer the number of rows to limit the query to
 	 * @param   integer the offset value
 	 * @return  string
 	 */
-	public function _limit($sql, $limit, $offset)
+	protected function _limit($sql, $limit, $offset)
 	{
 		$limit = $offset + $limit;
 		$newsql = "SELECT * FROM (select inner_query.*, rownum rnum FROM ($sql) inner_query WHERE rownum < $limit)";
@@ -789,11 +789,11 @@
 	/**
 	 * Close DB Connection
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @param   resource
 	 * @return  void
 	 */
-	public function _close($conn_id)
+	protected function _close($conn_id)
 	{
 		@oci_close($conn_id);
 	}
diff --git a/system/database/drivers/oci8/oci8_result.php b/system/database/drivers/oci8/oci8_result.php
index ea5f775..ae133d7 100644
--- a/system/database/drivers/oci8/oci8_result.php
+++ b/system/database/drivers/oci8/oci8_result.php
@@ -146,10 +146,10 @@
 	 *
 	 * Returns the result set as an array
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @return  array
 	 */
-	public function _fetch_assoc()
+	protected function _fetch_assoc()
 	{
 		$id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;
 		return oci_fetch_assoc($id);
@@ -162,10 +162,10 @@
 	 *
 	 * Returns the result set as an object
 	 *
-	 * @access  public
+	 * @access  protected
 	 * @return  object
 	 */
-	public function _fetch_object()
+	protected function _fetch_object()
 	{
 		$id = ($this->curs_id) ? $this->curs_id : $this->stmt_id;
 		return @oci_fetch_object($id);
@@ -204,10 +204,10 @@
 	 * this internally before fetching results to make sure the
 	 * result set starts at zero
 	 *
-	 * @access	public
+	 * @access	protected
 	 * @return	array
 	 */
-	public function _data_seek($n = 0)
+	protected function _data_seek($n = 0)
 	{
 		return FALSE; // Not needed
 	}
